high level system design